/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include <UI/UI.h>
#include <A_引擎/引擎.h>


#include "ui属性栏.h"



#define DEF_3D视口工作区		u"3D视口"
#define DEF_2D视口工作区		u"2D视口"
#define DEF_库视口工作区		u"库视口"
#define DEF_节点视口工作区		u"节点视口"
#define DEF_曲线视口工作区		u"曲线视口"
#define DEF_时间视口工作区		u"时间视口"
#define DEF_材质视口工作区		u"材质视口"
#define DEF_非编视口工作区		u"非编视口"
#define DEF_渲染视口工作区		u"渲染视口"
#define DEF_表格视口工作区		u"表格视口"
#define DEF_UI构建视口工作区	u"UI视口"
#define DEF_代码视口工作区		u"代码视口"
#define DEF_设置视口工作区		u"设置视口"
#define DEF_视频图像工作区		u"图像视口"
#define DEF_大纲视图工作区		u"大纲视图"
#define DEF_终端视图工作区		u"终端视图"


enum E_工作区操作类型 : uint32 {
	e_所有,
	//e_属性面板,

	e_拾取物体,
	e_创建物体,
	e_删除物体,
	e_变换物体,
	e_更新节点,
	e_选择节点,
	e_创建节点,
	e_删除节点,
	e_创建物体节点,
	e_创建场景节点,
	e_修改节点名称,
	e_切换物体节点,
	e_切换场景节点,
};



class C_工作区_工具条 : public C_Widget {

public:
	C_工作区_工具条(S_UI渲染环境& ctx);

	//ui_绘制模板_预设图形	m_背景绘制;
	uint32	m_背景;

	void f_构建部件(std::vector<S_Props>& newProp);

};





class C_工作区页面 : public C_Widget {
	
public:
	C_工作区页面(E_工作区类型 类型, S_UI渲染环境& ctx, E_方向 方向, C_Widget* 默认页面, C_状态条* 状态条 = nullptr, C_属性栏* 属性栏 = nullptr);
	
	const E_工作区类型 m_工作区类型;
	
	C_Widget* mui_视口页面;
	
	C_工作区_工具条* m_工具条;
	C_属性栏* mui_属性栏;
	C_状态条* mui_状态条;

	S_Surface2D*	m_背景;

	uint16	f_add工作区页面(C_Widget* page, std::string name, std::string ico);
	void	f_del工作区页面(uint16 id);

};





typedef void(*fp_工作区联动更新)(C_工作区页面* 工作区);


void f_页面_绑定工作区更新回调(E_工作区类型 工作区类型, fp_工作区联动更新 函数指针, C_工作区页面* 工作区);
void f_工作区_联动更新(E_工作区类型 工作区类型, E_工作区操作类型 操作类型);


void f_页面_从节点工作区更新其他工作区();
void f_页面_从文本工作区更新其他工作区();
void f_页面_从场景工作区更新其他工作区();
void f_页面_从时间工作区更新其他工作区();



//void		f_工作区_页面保存(FILE* f, C_Widget* self, S_组件构建& ob);
//C_Widget*	f_工作区_页面加载(FILE* f, S_UI创建环境& ctx, S_组件构建& ob);

void f_页面_渲染层配置(C_工作区页面* 工作区页面, bool 添加);






